{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "mjqPwkpZLq7k"
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import torchvision as tv\n",
    "from torchvision import transforms, utils\n",
    "\n",
    "\n",
    "import torch.nn.functional as F\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "from torch.autograd import Variable\n",
    "import torchvision.models as models\n",
    "# from torchvision import transforms, utils\n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "# from PIL import Image\n",
    "# import numpy as np\n",
    "import torch.optim as optim\n",
    "# import os\n",
    "import time\n",
    "\n",
    "import loadData"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 日志记录模块\n",
    "import logging\n",
    "logger = logging.getLogger(__name__)\n",
    "logger.setLevel(level = logging.INFO)\n",
    "handler = logging.FileHandler(\"./logs/2_Synchronization_Logs/log1245_relu.txt\")\n",
    "handler.setLevel(logging.INFO)\n",
    "formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')\n",
    "handler.setFormatter(formatter)\n",
    "\n",
    "console = logging.StreamHandler()\n",
    "console.setLevel(logging.INFO)\n",
    "\n",
    "logger.addHandler(handler)\n",
    "logger.addHandler(console)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "startTime = time.time()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "oMgidBKKLq7s"
   },
   "outputs": [],
   "source": [
    "transforms = tv.transforms.Compose([\n",
    "    transforms.ToTensor(),\n",
    "])\n",
    "\n",
    "\n",
    "numOfBatch = 9\n",
    "pixel = 64\n",
    "flag = 0\n",
    "root = f'./{numOfBatch}/data'\n",
    "batchSize = 2\n",
    "train_data = loadData.MyDataset(txt=f'files_train.txt', transform=None)\n",
    "test_data = loadData.MyDataset(txt=f'files_test.txt', transform=None)\n",
    "\n",
    "\n",
    "train_loader = DataLoader(dataset=train_data, batch_size=batchSize, shuffle=True, num_workers=2)\n",
    "test_loader = DataLoader(dataset=test_data, batch_size=batchSize, shuffle=False, num_workers=2)\n",
    "\n",
    "\n",
    "# print(train_loader)\n",
    "# print(test_loader)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "id": "6h-TJ16XLq7y",
    "outputId": "d4f641b6-e9d4-4aa4-8672-13c98099eb01"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch.utils.data.dataloader.DataLoader at 0x7efc1b0d6350>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_loader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 487
    },
    "colab_type": "code",
    "id": "CSdZoIqDLq7-",
    "outputId": "22fd354b-1be5-4f7d-e772-7873db328b62"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "tensor([[[ 1.7099e-02, -1.5284e-02,  6.5041e-03,  ..., -7.6858e-01,\n",
      "          -9.4864e-01, -9.9412e-01],\n",
      "         [ 2.8587e-02,  2.8916e-02,  2.6118e-04,  ...,  6.4963e-01,\n",
      "           2.7954e-01,  3.6858e-02],\n",
      "         [-9.7052e-01, -9.1112e-01, -6.3487e-01,  ..., -9.8734e-01,\n",
      "          -1.0117e+00, -9.6279e-01],\n",
      "         ...,\n",
      "         [-1.0117e+00, -9.4917e-01, -8.4947e-01,  ..., -7.2649e-01,\n",
      "          -8.9000e-01, -1.0192e+00],\n",
      "         [ 1.6539e-01,  3.5213e-01,  6.5528e-01,  ..., -4.9510e-01,\n",
      "          -2.0159e-01,  1.2229e-01],\n",
      "         [-9.8596e-01, -9.3896e-01, -7.4957e-01,  ..., -8.8251e-01,\n",
      "          -1.0308e+00, -1.0070e+00]],\n",
      "\n",
      "        [[-1.3287e-02, -6.6937e-03, -5.2314e-02,  ...,  7.9962e-01,\n",
      "           4.8261e-01,  2.6879e-01],\n",
      "         [ 4.0585e-03, -1.0283e-02, -1.1065e-03,  ...,  6.1691e-01,\n",
      "           8.3472e-01,  9.5376e-01],\n",
      "         [ 5.6685e-02, -3.4402e-01, -6.9011e-01,  ..., -1.0089e+00,\n",
      "          -8.6101e-01, -6.5721e-01],\n",
      "         ...,\n",
      "         [-3.8694e-03,  2.6549e-01,  6.4777e-01,  ...,  9.6096e-01,\n",
      "           9.7769e-01,  9.0470e-01],\n",
      "         [-5.6652e-01, -7.2572e-01, -9.5720e-01,  ..., -7.6341e-01,\n",
      "          -4.3318e-01, -1.3378e-01],\n",
      "         [ 8.0258e-01,  6.1904e-01,  2.4343e-01,  ..., -6.0196e-01,\n",
      "          -8.7212e-01, -9.6433e-01]]], dtype=torch.float64) tensor([28,  7])\n"
     ]
    }
   ],
   "source": [
    "data = iter(train_loader)\n",
    "\n",
    "# print(type(data))\n",
    "# print(len(data))\n",
    "data_, label = data.next()\n",
    "print(train_loader.batch_size)\n",
    "print(data_, label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "9ZSua6ALLq8I"
   },
   "outputs": [],
   "source": [
    "class Net(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net, self).__init__()\n",
    "        self.conv1 = nn.Conv1d(in_channels=160, out_channels=120, kernel_size=2)\n",
    "        self.conv2 = nn.Conv1d(in_channels=120, out_channels=100, kernel_size=2)\n",
    "        self.conv3 = nn.Conv1d(in_channels=100, out_channels=80, kernel_size=2)\n",
    "        self.dropout1 = nn.Dropout(0.5)\n",
    "        self.dropout2 = nn.Dropout(0.5)\n",
    "        \n",
    "#         self.fc1 = nn.Linear(1360, 1024)\n",
    "        self.fc1 = nn.Linear(31760, 10240)\n",
    "        self.fc2 = nn.Linear(10240, 1000)\n",
    "        self.fc3 = nn.Linear(1000, 54)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.conv1(x)\n",
    "#         x = F.elu(x)\n",
    "        x = F.relu(x)\n",
    "        x = F.max_pool1d(x, 1)\n",
    "        x = self.conv2(x)\n",
    "#         x = F.elu(x)\n",
    "        x = F.relu(x)\n",
    "        x = F.max_pool1d(x, 1)\n",
    "        x = self.conv3(x)\n",
    "#         x = F.elu(x)\n",
    "        x = F.relu(x)\n",
    "        x = F.max_pool1d(x, 1)\n",
    "        x = torch.flatten(x, 1)\n",
    "#         print(\"x的大小为:\", x.shape)\n",
    "        x = self.fc1(x)\n",
    "#         x = F.elu(x)\n",
    "        x = F.relu(x)\n",
    "        x = self.dropout1(x)\n",
    "        x = self.fc2(x)\n",
    "#         x = F.elu(x)\n",
    "        x = F.relu(x)\n",
    "        x = self.dropout2(x)\n",
    "        x = self.fc3(x)\n",
    "        output = F.log_softmax(x, dim=1)\n",
    "        return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "WBWBdr1LLq82"
   },
   "outputs": [],
   "source": [
    "net = Net()\n",
    "\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = optim.SGD(params=net.parameters(), lr=0.001, momentum=0.9)\n",
    "\n",
    "epochs = 20\n",
    "average_loss_series = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 286
    },
    "colab_type": "code",
    "id": "87bfeNToLq87",
    "outputId": "af954cd8-8959-4212-ff89-482e57c90d4e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[[-0.0531, -0.0953,  0.0051,  ...,  1.1091,  1.0499,  0.9622],\n",
      "         [ 0.0532, -0.0061, -0.0363,  ..., -0.1453,  0.2266,  0.4887],\n",
      "         [ 0.8572,  0.5767,  0.1992,  ..., -0.8904, -1.0618, -1.0549],\n",
      "         ...,\n",
      "         [-0.7530, -0.6164, -0.2033,  ...,  0.8141,  0.9769,  1.0296],\n",
      "         [-0.0774, -0.3967, -0.7541,  ..., -0.8952, -0.6046, -0.3802],\n",
      "         [ 0.9954,  0.9232,  0.7198,  ..., -0.5763, -0.8732, -0.9502]],\n",
      "\n",
      "        [[-0.0249,  0.0180,  0.0294,  ..., -0.1545,  0.1833,  0.5080],\n",
      "         [-0.0081,  0.0074,  0.0265,  ..., -0.9844, -1.0129, -0.8348],\n",
      "         [ 0.7388,  0.8737,  0.9571,  ...,  0.8726,  0.6435,  0.2880],\n",
      "         ...,\n",
      "         [-1.0262, -0.8963, -0.7845,  ..., -0.5422, -0.2473,  0.1010],\n",
      "         [ 0.8786,  0.7653,  0.4835,  ...,  0.1713, -0.1381, -0.4887],\n",
      "         [ 0.4740,  0.6712,  0.8265,  ...,  1.0089,  1.0116,  0.9104]]],\n",
      "       dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "for a, b in enumerate(train_loader):\n",
    "    inputs, labels = b\n",
    "    print(inputs)\n",
    "    break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 338
    },
    "colab_type": "code",
    "id": "vrT4DrYlQ_sf",
    "outputId": "f29983ea-a956-45f1-ff43-cf529516ba11"
   },
   "outputs": [],
   "source": [
    "# s = torch.randn(2, 160,20).double()\n",
    "# conv = nn.Conv1d(in_channels=160, out_channels=120, kernel_size=2)\n",
    "# conv(s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "colab_type": "code",
    "id": "_c6Gwp3ALq9k",
    "outputId": "60864ad5-6b9b-4875-a39f-9600521d3629"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:17: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "[1, 10] loss: 3.9901932001113893\n",
      "[1, 10] acc: 0.10000000149011612\n",
      "[1, 20] loss: 3.986944651603699\n",
      "[1, 20] acc: 0.05000000074505806\n",
      "[1, 30] loss: 3.9823945999145507\n",
      "[1, 30] acc: 0.05000000074505806\n",
      "[1, 40] loss: 3.9949900627136232\n",
      "[1, 40] acc: 0.0\n",
      "[1, 50] loss: 3.9927796602249144\n",
      "[1, 50] acc: 0.0\n",
      "[1, 60] loss: 3.993291735649109\n",
      "[1, 60] acc: 0.0\n",
      "[1, 70] loss: 3.996748685836792\n",
      "[1, 70] acc: 0.0\n",
      "[1, 80] loss: 3.9943353176116942\n",
      "[1, 80] acc: 0.0\n",
      "[1, 90] loss: 3.9957457542419434\n",
      "[1, 90] acc: 0.0\n",
      "[1, 100] loss: 3.9955893039703367\n",
      "[1, 100] acc: 0.0\n",
      "[2, 10] loss: 3.9833698987960817\n",
      "[2, 10] acc: 0.0\n",
      "[2, 20] loss: 3.9852251291275023\n",
      "[2, 20] acc: 0.05000000074505806\n",
      "[2, 30] loss: 3.9957727432250976\n",
      "[2, 30] acc: 0.0\n",
      "[2, 40] loss: 3.9854061365127564\n",
      "[2, 40] acc: 0.0\n",
      "[2, 50] loss: 3.988486337661743\n",
      "[2, 50] acc: 0.10000000149011612\n",
      "[2, 60] loss: 3.991933083534241\n",
      "[2, 60] acc: 0.05000000074505806\n",
      "[2, 70] loss: 3.990487575531006\n",
      "[2, 70] acc: 0.0\n",
      "[2, 80] loss: 3.9863119602203367\n",
      "[2, 80] acc: 0.0\n",
      "[2, 90] loss: 3.987268018722534\n",
      "[2, 90] acc: 0.0\n",
      "[2, 100] loss: 3.997017168998718\n",
      "[2, 100] acc: 0.0\n",
      "[3, 10] loss: 3.9803051471710207\n",
      "[3, 10] acc: 0.05000000074505806\n",
      "[3, 20] loss: 3.9751553297042848\n",
      "[3, 20] acc: 0.0\n",
      "[3, 30] loss: 3.9867576122283936\n",
      "[3, 30] acc: 0.05000000074505806\n",
      "[3, 40] loss: 3.9798190593719482\n",
      "[3, 40] acc: 0.05000000074505806\n",
      "[3, 50] loss: 3.98440363407135\n",
      "[3, 50] acc: 0.0\n",
      "[3, 60] loss: 3.9763742446899415\n",
      "[3, 60] acc: 0.0\n",
      "[3, 70] loss: 3.984719395637512\n",
      "[3, 70] acc: 0.05000000074505806\n",
      "[3, 80] loss: 3.983707237243652\n",
      "[3, 80] acc: 0.05000000074505806\n",
      "[3, 90] loss: 3.990907073020935\n",
      "[3, 90] acc: 0.0\n",
      "[3, 100] loss: 3.9979920864105223\n",
      "[3, 100] acc: 0.05000000074505806\n",
      "[4, 10] loss: 3.9792608976364137\n",
      "[4, 10] acc: 0.10000000149011612\n",
      "[4, 20] loss: 3.9721752643585204\n",
      "[4, 20] acc: 0.10000000149011612\n",
      "[4, 30] loss: 3.974942183494568\n",
      "[4, 30] acc: 0.10000000149011612\n",
      "[4, 40] loss: 3.978817272186279\n",
      "[4, 40] acc: 0.0\n",
      "[4, 50] loss: 3.9894322395324706\n",
      "[4, 50] acc: 0.0\n",
      "[4, 60] loss: 3.9876999855041504\n",
      "[4, 60] acc: 0.05000000074505806\n",
      "[4, 70] loss: 3.981643056869507\n",
      "[4, 70] acc: 0.05000000074505806\n",
      "[4, 80] loss: 3.982189083099365\n",
      "[4, 80] acc: 0.05000000074505806\n",
      "[4, 90] loss: 3.990086221694946\n",
      "[4, 90] acc: 0.05000000074505806\n",
      "[4, 100] loss: 3.9881575107574463\n",
      "[4, 100] acc: 0.0\n",
      "[5, 10] loss: 3.9655166149139403\n",
      "[5, 10] acc: 0.15000000596046448\n",
      "[5, 20] loss: 3.9712838172912597\n",
      "[5, 20] acc: 0.0\n",
      "[5, 30] loss: 3.9759108781814576\n",
      "[5, 30] acc: 0.05000000074505806\n",
      "[5, 40] loss: 3.9736462116241453\n",
      "[5, 40] acc: 0.0\n",
      "[5, 50] loss: 3.9735766649246216\n",
      "[5, 50] acc: 0.0\n",
      "[5, 60] loss: 3.9614435195922852\n",
      "[5, 60] acc: 0.10000000149011612\n",
      "[5, 70] loss: 3.9770987749099733\n",
      "[5, 70] acc: 0.0\n",
      "[5, 80] loss: 3.982088541984558\n",
      "[5, 80] acc: 0.0\n",
      "[5, 90] loss: 3.985871744155884\n",
      "[5, 90] acc: 0.0\n",
      "[5, 100] loss: 3.9970330238342284\n",
      "[5, 100] acc: 0.0\n",
      "[6, 10] loss: 3.965288496017456\n",
      "[6, 10] acc: 0.05000000074505806\n",
      "[6, 20] loss: 3.9658759117126463\n",
      "[6, 20] acc: 0.0\n",
      "[6, 30] loss: 3.966071057319641\n",
      "[6, 30] acc: 0.05000000074505806\n",
      "[6, 40] loss: 3.95325186252594\n",
      "[6, 40] acc: 0.15000000596046448\n",
      "[6, 50] loss: 3.963540816307068\n",
      "[6, 50] acc: 0.10000000149011612\n",
      "[6, 60] loss: 3.972598671913147\n",
      "[6, 60] acc: 0.0\n",
      "[6, 70] loss: 3.9676880121231077\n",
      "[6, 70] acc: 0.10000000149011612\n",
      "[6, 80] loss: 3.957973527908325\n",
      "[6, 80] acc: 0.20000000298023224\n",
      "[6, 90] loss: 3.981304955482483\n",
      "[6, 90] acc: 0.0\n",
      "[6, 100] loss: 3.990332341194153\n",
      "[6, 100] acc: 0.0\n",
      "[7, 10] loss: 3.941086006164551\n",
      "[7, 10] acc: 0.10000000149011612\n",
      "[7, 20] loss: 3.953946590423584\n",
      "[7, 20] acc: 0.20000000298023224\n",
      "[7, 30] loss: 3.9585357427597048\n",
      "[7, 30] acc: 0.10000000149011612\n",
      "[7, 40] loss: 3.9373367547988893\n",
      "[7, 40] acc: 0.15000000596046448\n",
      "[7, 50] loss: 3.967785692214966\n",
      "[7, 50] acc: 0.05000000074505806\n",
      "[7, 60] loss: 3.951070713996887\n",
      "[7, 60] acc: 0.05000000074505806\n",
      "[7, 70] loss: 3.950011444091797\n",
      "[7, 70] acc: 0.10000000149011612\n",
      "[7, 80] loss: 3.9519543170928957\n",
      "[7, 80] acc: 0.10000000149011612\n",
      "[7, 90] loss: 3.9575898170471193\n",
      "[7, 90] acc: 0.10000000149011612\n",
      "[7, 100] loss: 3.94644832611084\n",
      "[7, 100] acc: 0.10000000149011612\n",
      "[8, 10] loss: 3.9151477336883547\n",
      "[8, 10] acc: 0.10000000149011612\n",
      "[8, 20] loss: 3.910211753845215\n",
      "[8, 20] acc: 0.05000000074505806\n",
      "[8, 30] loss: 3.908338212966919\n",
      "[8, 30] acc: 0.05000000074505806\n",
      "[8, 40] loss: 3.900307536125183\n",
      "[8, 40] acc: 0.15000000596046448\n",
      "[8, 50] loss: 3.920675539970398\n",
      "[8, 50] acc: 0.0\n",
      "[8, 60] loss: 3.905255603790283\n",
      "[8, 60] acc: 0.10000000149011612\n",
      "[8, 70] loss: 3.865709376335144\n",
      "[8, 70] acc: 0.10000000149011612\n",
      "[8, 80] loss: 4.015810751914978\n",
      "[8, 80] acc: 0.0\n",
      "[8, 90] loss: 3.974788546562195\n",
      "[8, 90] acc: 0.0\n",
      "[8, 100] loss: 3.938622736930847\n",
      "[8, 100] acc: 0.05000000074505806\n",
      "[9, 10] loss: 3.8389071226119995\n",
      "[9, 10] acc: 0.3499999940395355\n",
      "[9, 20] loss: 3.849769139289856\n",
      "[9, 20] acc: 0.20000000298023224\n",
      "[9, 30] loss: 3.837688374519348\n",
      "[9, 30] acc: 0.15000000596046448\n",
      "[9, 40] loss: 3.8039834976196287\n",
      "[9, 40] acc: 0.05000000074505806\n",
      "[9, 50] loss: 3.807850384712219\n",
      "[9, 50] acc: 0.10000000149011612\n",
      "[9, 60] loss: 4.0025653600692745\n",
      "[9, 60] acc: 0.0\n",
      "[9, 70] loss: 3.8436625242233275\n",
      "[9, 70] acc: 0.05000000074505806\n",
      "[9, 80] loss: 3.9074584245681763\n",
      "[9, 80] acc: 0.0\n",
      "[9, 90] loss: 3.832075834274292\n",
      "[9, 90] acc: 0.05000000074505806\n",
      "[9, 100] loss: 3.8126219272613526\n",
      "[9, 100] acc: 0.0\n",
      "[10, 10] loss: 3.6863129854202272\n",
      "[10, 10] acc: 0.25\n",
      "[10, 20] loss: 3.6581029415130617\n",
      "[10, 20] acc: 0.10000000149011612\n",
      "[10, 30] loss: 3.7531728506088258\n",
      "[10, 30] acc: 0.0\n",
      "[10, 40] loss: 3.766407918930054\n",
      "[10, 40] acc: 0.05000000074505806\n",
      "[10, 50] loss: 3.6509413003921507\n",
      "[10, 50] acc: 0.10000000149011612\n",
      "[10, 60] loss: 3.6594166994094848\n",
      "[10, 60] acc: 0.15000000596046448\n",
      "[10, 70] loss: 3.7408114671707153\n",
      "[10, 70] acc: 0.0\n",
      "[10, 80] loss: 3.8526188850402834\n",
      "[10, 80] acc: 0.10000000149011612\n",
      "[10, 90] loss: 3.825257158279419\n",
      "[10, 90] acc: 0.10000000149011612\n",
      "[10, 100] loss: 3.8084093570709228\n",
      "[10, 100] acc: 0.10000000149011612\n",
      "[11, 10] loss: 3.5896698951721193\n",
      "[11, 10] acc: 0.10000000149011612\n",
      "[11, 20] loss: 3.36932692527771\n",
      "[11, 20] acc: 0.20000000298023224\n",
      "[11, 30] loss: 3.3112576723098757\n",
      "[11, 30] acc: 0.20000000298023224\n",
      "[11, 40] loss: 3.3532671451568605\n",
      "[11, 40] acc: 0.15000000596046448\n",
      "[11, 50] loss: 3.5236297607421876\n",
      "[11, 50] acc: 0.10000000149011612\n",
      "[11, 60] loss: 3.5778116464614866\n",
      "[11, 60] acc: 0.10000000149011612\n",
      "[11, 70] loss: 3.5302868843078614\n",
      "[11, 70] acc: 0.10000000149011612\n",
      "[11, 80] loss: 3.653939127922058\n",
      "[11, 80] acc: 0.10000000149011612\n",
      "[11, 90] loss: 3.458928656578064\n",
      "[11, 90] acc: 0.10000000149011612\n",
      "[11, 100] loss: 3.6232277154922485\n",
      "[11, 100] acc: 0.0\n",
      "[12, 10] loss: 3.0247568607330324\n",
      "[12, 10] acc: 0.30000001192092896\n",
      "[12, 20] loss: 3.064797520637512\n",
      "[12, 20] acc: 0.20000000298023224\n",
      "[12, 30] loss: 3.0728906393051147\n",
      "[12, 30] acc: 0.25\n",
      "[12, 40] loss: 3.179796004295349\n",
      "[12, 40] acc: 0.20000000298023224\n",
      "[12, 50] loss: 3.09092800617218\n",
      "[12, 50] acc: 0.15000000596046448\n",
      "[12, 60] loss: 3.1594987154006957\n",
      "[12, 60] acc: 0.20000000298023224\n",
      "[12, 70] loss: 3.056683826446533\n",
      "[12, 70] acc: 0.20000000298023224\n",
      "[12, 80] loss: 3.123123383522034\n",
      "[12, 80] acc: 0.15000000596046448\n",
      "[12, 90] loss: 3.2822982549667357\n",
      "[12, 90] acc: 0.20000000298023224\n",
      "[12, 100] loss: 3.3891314029693604\n",
      "[12, 100] acc: 0.05000000074505806\n",
      "[13, 10] loss: 2.375355589389801\n",
      "[13, 10] acc: 0.4000000059604645\n",
      "[13, 20] loss: 2.542358374595642\n",
      "[13, 20] acc: 0.4000000059604645\n",
      "[13, 30] loss: 2.4662057638168333\n",
      "[13, 30] acc: 0.3499999940395355\n",
      "[13, 40] loss: 2.449993199110031\n",
      "[13, 40] acc: 0.3499999940395355\n",
      "[13, 50] loss: 3.231218957901001\n",
      "[13, 50] acc: 0.10000000149011612\n",
      "[13, 60] loss: 3.01095929145813\n",
      "[13, 60] acc: 0.10000000149011612\n",
      "[13, 70] loss: 2.8142857253551483\n",
      "[13, 70] acc: 0.20000000298023224\n",
      "[13, 80] loss: 2.7364386320114136\n",
      "[13, 80] acc: 0.25\n",
      "[13, 90] loss: 2.587165665626526\n",
      "[13, 90] acc: 0.3499999940395355\n",
      "[13, 100] loss: 2.5289060473442078\n",
      "[13, 100] acc: 0.25\n",
      "[14, 10] loss: 1.9365885615348817\n",
      "[14, 10] acc: 0.4000000059604645\n",
      "[14, 20] loss: 2.0983397126197816\n",
      "[14, 20] acc: 0.4000000059604645\n",
      "[14, 30] loss: 1.7627967540174723\n",
      "[14, 30] acc: 0.4000000059604645\n",
      "[14, 40] loss: 2.2213977932929994\n",
      "[14, 40] acc: 0.30000001192092896\n",
      "[14, 50] loss: 2.224335616081953\n",
      "[14, 50] acc: 0.44999998807907104\n",
      "[14, 60] loss: 2.090730977058411\n",
      "[14, 60] acc: 0.5\n",
      "[14, 70] loss: 2.98975487947464\n",
      "[14, 70] acc: 0.30000001192092896\n",
      "[14, 80] loss: 2.117151880264282\n",
      "[14, 80] acc: 0.44999998807907104\n",
      "[14, 90] loss: 2.6141911506652833\n",
      "[14, 90] acc: 0.3499999940395355\n",
      "[14, 100] loss: 2.6136333107948304\n",
      "[14, 100] acc: 0.30000001192092896\n",
      "[15, 10] loss: 1.5771534740924835\n",
      "[15, 10] acc: 0.6499999761581421\n",
      "[15, 20] loss: 1.0899436615407467\n",
      "[15, 20] acc: 0.699999988079071\n",
      "[15, 30] loss: 1.7464998796582223\n",
      "[15, 30] acc: 0.44999998807907104\n",
      "[15, 40] loss: 1.649267489463091\n",
      "[15, 40] acc: 0.550000011920929\n",
      "[15, 50] loss: 2.424621951580048\n",
      "[15, 50] acc: 0.3499999940395355\n",
      "[15, 60] loss: 2.2283448696136476\n",
      "[15, 60] acc: 0.550000011920929\n",
      "[15, 70] loss: 1.9214105933904648\n",
      "[15, 70] acc: 0.6000000238418579\n",
      "[15, 80] loss: 1.616775381565094\n",
      "[15, 80] acc: 0.44999998807907104\n",
      "[15, 90] loss: 1.702841892838478\n",
      "[15, 90] acc: 0.550000011920929\n",
      "[15, 100] loss: 1.5471229128539563\n",
      "[15, 100] acc: 0.44999998807907104\n",
      "[16, 10] loss: 1.0977363915415481\n",
      "[16, 10] acc: 0.75\n",
      "[16, 20] loss: 1.6261101096868515\n",
      "[16, 20] acc: 0.550000011920929\n",
      "[16, 30] loss: 0.988385824393481\n",
      "[16, 30] acc: 0.699999988079071\n",
      "[16, 40] loss: 1.1012767933309078\n",
      "[16, 40] acc: 0.699999988079071\n",
      "[16, 50] loss: 1.5056480944156647\n",
      "[16, 50] acc: 0.5\n",
      "[16, 60] loss: 1.0687328334897757\n",
      "[16, 60] acc: 0.75\n",
      "[16, 70] loss: 1.425290223956108\n",
      "[16, 70] acc: 0.6499999761581421\n",
      "[16, 80] loss: 1.7711129050701857\n",
      "[16, 80] acc: 0.550000011920929\n",
      "[16, 90] loss: 1.0656347140669822\n",
      "[16, 90] acc: 0.800000011920929\n",
      "[16, 100] loss: 1.2097107775509357\n",
      "[16, 100] acc: 0.6000000238418579\n",
      "[17, 10] loss: 0.8243795469403267\n",
      "[17, 10] acc: 0.75\n",
      "[17, 20] loss: 1.1973712068051099\n",
      "[17, 20] acc: 0.6000000238418579\n",
      "[17, 30] loss: 0.8010889686644077\n",
      "[17, 30] acc: 0.8500000238418579\n",
      "[17, 40] loss: 1.949652213510126\n",
      "[17, 40] acc: 0.6000000238418579\n",
      "[17, 50] loss: 1.336482870578766\n",
      "[17, 50] acc: 0.800000011920929\n",
      "[17, 60] loss: 1.1413369119167327\n",
      "[17, 60] acc: 0.699999988079071\n",
      "[17, 70] loss: 0.633536946773529\n",
      "[17, 70] acc: 0.8999999761581421\n",
      "[17, 80] loss: 1.0828140943311155\n",
      "[17, 80] acc: 0.699999988079071\n",
      "[17, 90] loss: 0.4526194460690022\n",
      "[17, 90] acc: 0.949999988079071\n",
      "[17, 100] loss: 1.7242363039171322\n",
      "[17, 100] acc: 0.75\n",
      "[18, 10] loss: 0.48383259065449236\n",
      "[18, 10] acc: 0.8500000238418579\n",
      "[18, 20] loss: 0.49846260659396646\n",
      "[18, 20] acc: 0.8999999761581421\n",
      "[18, 30] loss: 0.9293338051764295\n",
      "[18, 30] acc: 0.800000011920929\n",
      "[18, 40] loss: 0.46170626548118887\n",
      "[18, 40] acc: 0.8999999761581421\n",
      "[18, 50] loss: 0.5166549470741302\n",
      "[18, 50] acc: 0.8999999761581421\n",
      "[18, 60] loss: 1.0786337077617645\n",
      "[18, 60] acc: 0.75\n",
      "[18, 70] loss: 0.7270822361111641\n",
      "[18, 70] acc: 0.75\n",
      "[18, 80] loss: 0.7546321477741003\n",
      "[18, 80] acc: 0.75\n",
      "[18, 90] loss: 0.9359601113479584\n",
      "[18, 90] acc: 0.8500000238418579\n",
      "[18, 100] loss: 1.7050922155380248\n",
      "[18, 100] acc: 0.800000011920929\n",
      "[19, 10] loss: 0.6900086432695389\n",
      "[19, 10] acc: 0.8500000238418579\n",
      "[19, 20] loss: 0.5672694641165436\n",
      "[19, 20] acc: 0.8999999761581421\n",
      "[19, 30] loss: 0.30040868604555726\n",
      "[19, 30] acc: 0.949999988079071\n",
      "[19, 40] loss: 0.361215035058558\n",
      "[19, 40] acc: 0.8999999761581421\n",
      "[19, 50] loss: 0.2975381028605625\n",
      "[19, 50] acc: 0.8999999761581421\n",
      "[19, 60] loss: 0.374210683759884\n",
      "[19, 60] acc: 0.8999999761581421\n",
      "[19, 70] loss: 0.9215708828764037\n",
      "[19, 70] acc: 0.699999988079071\n",
      "[19, 80] loss: 1.333072793390602\n",
      "[19, 80] acc: 0.8500000238418579\n",
      "[19, 90] loss: 0.8930831962730735\n",
      "[19, 90] acc: 0.8500000238418579\n",
      "[19, 100] loss: 0.5920393075793982\n",
      "[19, 100] acc: 0.75\n",
      "[20, 10] loss: 0.6660600231960416\n",
      "[20, 10] acc: 0.800000011920929\n",
      "[20, 20] loss: 0.7889297109097242\n",
      "[20, 20] acc: 0.8999999761581421\n",
      "[20, 30] loss: 0.4996241698041558\n",
      "[20, 30] acc: 0.8500000238418579\n",
      "[20, 40] loss: 0.5823028728365898\n",
      "[20, 40] acc: 0.8999999761581421\n",
      "[20, 50] loss: 0.09240658767521381\n",
      "[20, 50] acc: 1.0\n",
      "[20, 60] loss: 0.9311299471184611\n",
      "[20, 60] acc: 0.8999999761581421\n",
      "[20, 70] loss: 0.2463088197633624\n",
      "[20, 70] acc: 0.949999988079071\n",
      "[20, 80] loss: 0.36955892350524666\n",
      "[20, 80] acc: 0.949999988079071\n",
      "[20, 90] loss: 0.7189692094922066\n",
      "[20, 90] acc: 0.8500000238418579\n",
      "[20, 100] loss: 0.3861215414479375\n",
      "[20, 100] acc: 0.8999999761581421\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "--- Logging error ---\n",
      "Traceback (most recent call last):\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 1025, in emit\n",
      "    msg = self.format(record)\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 869, in format\n",
      "    return fmt.format(record)\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 608, in format\n",
      "    record.message = record.getMessage()\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 369, in getMessage\n",
      "    msg = msg % self.args\n",
      "TypeError: not all arguments converted during string formatting\n",
      "Call stack:\n",
      "  File \"/opt/conda/lib/python3.7/runpy.py\", line 193, in _run_module_as_main\n",
      "    \"__main__\", mod_spec)\n",
      "  File \"/opt/conda/lib/python3.7/runpy.py\", line 85, in _run_code\n",
      "    exec(code, run_globals)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py\", line 16, in <module>\n",
      "    app.launch_new_instance()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py\", line 664, in launch_instance\n",
      "    app.start()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelapp.py\", line 583, in start\n",
      "    self.io_loop.start()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/platform/asyncio.py\", line 149, in start\n",
      "    self.asyncio_loop.run_forever()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/base_events.py\", line 541, in run_forever\n",
      "    self._run_once()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/base_events.py\", line 1786, in _run_once\n",
      "    handle._run()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/events.py\", line 88, in _run\n",
      "    self._context.run(self._callback, *self._args)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/ioloop.py\", line 690, in <lambda>\n",
      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/ioloop.py\", line 743, in _run_callback\n",
      "    ret = callback()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 787, in inner\n",
      "    self.run()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 748, in run\n",
      "    yielded = self.gen.send(value)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 377, in dispatch_queue\n",
      "    yield self.process_one()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 225, in wrapper\n",
      "    runner = Runner(result, future, yielded)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 714, in __init__\n",
      "    self.run()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 748, in run\n",
      "    yielded = self.gen.send(value)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 361, in process_one\n",
      "    yield gen.maybe_future(dispatch(*args))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 268, in dispatch_shell\n",
      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 541, in execute_request\n",
      "    user_expressions, allow_stdin,\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/ipkernel.py\", line 300, in do_execute\n",
      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/zmqshell.py\", line 536, in run_cell\n",
      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 2858, in run_cell\n",
      "    raw_cell, store_history, silent, shell_futures)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 2886, in _run_cell\n",
      "    return runner(coro)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/async_helpers.py\", line 68, in _pseudo_sync_runner\n",
      "    coro.send(None)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3063, in run_cell_async\n",
      "    interactivity=interactivity, compiler=compiler, result=result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3254, in run_ast_nodes\n",
      "    if (await self.run_code(code, result,  async_=asy)):\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3331, in run_code\n",
      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
      "  File \"<ipython-input-11-5dea1a607ad2>\", line 77, in <module>\n",
      "    correct = correct_rate(net, test_loader)\n",
      "  File \"<ipython-input-11-5dea1a607ad2>\", line 72, in correct_rate\n",
      "    logger.info(\"total的值为：\",total)\n",
      "Message: 'total的值为：'\n",
      "Arguments: (54.0,)\n",
      "--- Logging error ---\n",
      "Traceback (most recent call last):\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 1025, in emit\n",
      "    msg = self.format(record)\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 869, in format\n",
      "    return fmt.format(record)\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 608, in format\n",
      "    record.message = record.getMessage()\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 369, in getMessage\n",
      "    msg = msg % self.args\n",
      "TypeError: not all arguments converted during string formatting\n",
      "Call stack:\n",
      "  File \"/opt/conda/lib/python3.7/runpy.py\", line 193, in _run_module_as_main\n",
      "    \"__main__\", mod_spec)\n",
      "  File \"/opt/conda/lib/python3.7/runpy.py\", line 85, in _run_code\n",
      "    exec(code, run_globals)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py\", line 16, in <module>\n",
      "    app.launch_new_instance()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py\", line 664, in launch_instance\n",
      "    app.start()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelapp.py\", line 583, in start\n",
      "    self.io_loop.start()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/platform/asyncio.py\", line 149, in start\n",
      "    self.asyncio_loop.run_forever()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/base_events.py\", line 541, in run_forever\n",
      "    self._run_once()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/base_events.py\", line 1786, in _run_once\n",
      "    handle._run()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/events.py\", line 88, in _run\n",
      "    self._context.run(self._callback, *self._args)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/ioloop.py\", line 690, in <lambda>\n",
      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/ioloop.py\", line 743, in _run_callback\n",
      "    ret = callback()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 787, in inner\n",
      "    self.run()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 748, in run\n",
      "    yielded = self.gen.send(value)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 377, in dispatch_queue\n",
      "    yield self.process_one()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 225, in wrapper\n",
      "    runner = Runner(result, future, yielded)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 714, in __init__\n",
      "    self.run()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 748, in run\n",
      "    yielded = self.gen.send(value)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 361, in process_one\n",
      "    yield gen.maybe_future(dispatch(*args))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 268, in dispatch_shell\n",
      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 541, in execute_request\n",
      "    user_expressions, allow_stdin,\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/ipkernel.py\", line 300, in do_execute\n",
      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/zmqshell.py\", line 536, in run_cell\n",
      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 2858, in run_cell\n",
      "    raw_cell, store_history, silent, shell_futures)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 2886, in _run_cell\n",
      "    return runner(coro)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/async_helpers.py\", line 68, in _pseudo_sync_runner\n",
      "    coro.send(None)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3063, in run_cell_async\n",
      "    interactivity=interactivity, compiler=compiler, result=result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3254, in run_ast_nodes\n",
      "    if (await self.run_code(code, result,  async_=asy)):\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3331, in run_code\n",
      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
      "  File \"<ipython-input-11-5dea1a607ad2>\", line 77, in <module>\n",
      "    correct = correct_rate(net, test_loader)\n",
      "  File \"<ipython-input-11-5dea1a607ad2>\", line 72, in correct_rate\n",
      "    logger.info(\"total的值为：\",total)\n",
      "Message: 'total的值为：'\n",
      "Arguments: (54.0,)\n",
      "81张测试集中准确率为： 35.185184478759766%\n",
      "[[1 0 0 ... 0 0 0]\n",
      " [1 0 0 ... 0 0 0]\n",
      " [0 0 1 ... 0 0 0]\n",
      " ...\n",
      " [0 0 0 ... 0 0 0]\n",
      " [0 0 0 ... 0 0 0]\n",
      " [0 0 1 ... 0 0 0]]\n",
      "--- Logging error ---\n",
      "Traceback (most recent call last):\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 1025, in emit\n",
      "    msg = self.format(record)\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 869, in format\n",
      "    return fmt.format(record)\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 608, in format\n",
      "    record.message = record.getMessage()\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 369, in getMessage\n",
      "    msg = msg % self.args\n",
      "TypeError: not all arguments converted during string formatting\n",
      "Call stack:\n",
      "  File \"/opt/conda/lib/python3.7/runpy.py\", line 193, in _run_module_as_main\n",
      "    \"__main__\", mod_spec)\n",
      "  File \"/opt/conda/lib/python3.7/runpy.py\", line 85, in _run_code\n",
      "    exec(code, run_globals)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py\", line 16, in <module>\n",
      "    app.launch_new_instance()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py\", line 664, in launch_instance\n",
      "    app.start()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelapp.py\", line 583, in start\n",
      "    self.io_loop.start()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/platform/asyncio.py\", line 149, in start\n",
      "    self.asyncio_loop.run_forever()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/base_events.py\", line 541, in run_forever\n",
      "    self._run_once()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/base_events.py\", line 1786, in _run_once\n",
      "    handle._run()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/events.py\", line 88, in _run\n",
      "    self._context.run(self._callback, *self._args)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/ioloop.py\", line 690, in <lambda>\n",
      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/ioloop.py\", line 743, in _run_callback\n",
      "    ret = callback()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 787, in inner\n",
      "    self.run()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 748, in run\n",
      "    yielded = self.gen.send(value)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 377, in dispatch_queue\n",
      "    yield self.process_one()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 225, in wrapper\n",
      "    runner = Runner(result, future, yielded)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 714, in __init__\n",
      "    self.run()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 748, in run\n",
      "    yielded = self.gen.send(value)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 361, in process_one\n",
      "    yield gen.maybe_future(dispatch(*args))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 268, in dispatch_shell\n",
      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 541, in execute_request\n",
      "    user_expressions, allow_stdin,\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/ipkernel.py\", line 300, in do_execute\n",
      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/zmqshell.py\", line 536, in run_cell\n",
      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 2858, in run_cell\n",
      "    raw_cell, store_history, silent, shell_futures)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 2886, in _run_cell\n",
      "    return runner(coro)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/async_helpers.py\", line 68, in _pseudo_sync_runner\n",
      "    coro.send(None)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3063, in run_cell_async\n",
      "    interactivity=interactivity, compiler=compiler, result=result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3254, in run_ast_nodes\n",
      "    if (await self.run_code(code, result,  async_=asy)):\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3331, in run_code\n",
      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
      "  File \"<ipython-input-11-5dea1a607ad2>\", line 90, in <module>\n",
      "    logger.info('the running time is', time.time() - startTime)\n",
      "Message: 'the running time is'\n",
      "Arguments: (5294.992721557617,)\n",
      "--- Logging error ---\n",
      "Traceback (most recent call last):\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 1025, in emit\n",
      "    msg = self.format(record)\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 869, in format\n",
      "    return fmt.format(record)\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 608, in format\n",
      "    record.message = record.getMessage()\n",
      "  File \"/opt/conda/lib/python3.7/logging/__init__.py\", line 369, in getMessage\n",
      "    msg = msg % self.args\n",
      "TypeError: not all arguments converted during string formatting\n",
      "Call stack:\n",
      "  File \"/opt/conda/lib/python3.7/runpy.py\", line 193, in _run_module_as_main\n",
      "    \"__main__\", mod_spec)\n",
      "  File \"/opt/conda/lib/python3.7/runpy.py\", line 85, in _run_code\n",
      "    exec(code, run_globals)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py\", line 16, in <module>\n",
      "    app.launch_new_instance()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py\", line 664, in launch_instance\n",
      "    app.start()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelapp.py\", line 583, in start\n",
      "    self.io_loop.start()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/platform/asyncio.py\", line 149, in start\n",
      "    self.asyncio_loop.run_forever()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/base_events.py\", line 541, in run_forever\n",
      "    self._run_once()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/base_events.py\", line 1786, in _run_once\n",
      "    handle._run()\n",
      "  File \"/opt/conda/lib/python3.7/asyncio/events.py\", line 88, in _run\n",
      "    self._context.run(self._callback, *self._args)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/ioloop.py\", line 690, in <lambda>\n",
      "    lambda f: self._run_callback(functools.partial(callback, future))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/ioloop.py\", line 743, in _run_callback\n",
      "    ret = callback()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 787, in inner\n",
      "    self.run()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 748, in run\n",
      "    yielded = self.gen.send(value)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 377, in dispatch_queue\n",
      "    yield self.process_one()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 225, in wrapper\n",
      "    runner = Runner(result, future, yielded)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 714, in __init__\n",
      "    self.run()\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 748, in run\n",
      "    yielded = self.gen.send(value)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 361, in process_one\n",
      "    yield gen.maybe_future(dispatch(*args))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 268, in dispatch_shell\n",
      "    yield gen.maybe_future(handler(stream, idents, msg))\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\", line 541, in execute_request\n",
      "    user_expressions, allow_stdin,\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/tornado/gen.py\", line 209, in wrapper\n",
      "    yielded = next(result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/ipkernel.py\", line 300, in do_execute\n",
      "    res = shell.run_cell(code, store_history=store_history, silent=silent)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/ipykernel/zmqshell.py\", line 536, in run_cell\n",
      "    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 2858, in run_cell\n",
      "    raw_cell, store_history, silent, shell_futures)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 2886, in _run_cell\n",
      "    return runner(coro)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/async_helpers.py\", line 68, in _pseudo_sync_runner\n",
      "    coro.send(None)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3063, in run_cell_async\n",
      "    interactivity=interactivity, compiler=compiler, result=result)\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3254, in run_ast_nodes\n",
      "    if (await self.run_code(code, result,  async_=asy)):\n",
      "  File \"/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py\", line 3331, in run_code\n",
      "    exec(code_obj, self.user_global_ns, self.user_ns)\n",
      "  File \"<ipython-input-11-5dea1a607ad2>\", line 90, in <module>\n",
      "    logger.info('the running time is', time.time() - startTime)\n",
      "Message: 'the running time is'\n",
      "Arguments: (5294.992721557617,)\n",
      "/opt/conda/lib/python3.7/site-packages/torch/serialization.py:402: UserWarning: Couldn't retrieve source code for container of type Net. It won't be checked for correctness upon loading.\n",
      "  \"type \" + obj.__name__ + \". It won't be checked \"\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "torch.cuda.set_device(1)\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    for epoch in range(epochs):\n",
    "        running_loss = 0.0\n",
    "        running_acc = 0.0\n",
    "\n",
    "        for i, data in enumerate(train_loader):\n",
    "#             print(\"i:\", i )\n",
    "#             print(\"data: \", data)\n",
    "            inputs, labels = data\n",
    "            optimizer.zero_grad()\n",
    "\n",
    "            inputs = inputs.permute(0, 2, 1)\n",
    "            inputs = torch.tensor(inputs, dtype=torch.float32)\n",
    "            outputs = net(inputs)\n",
    "            _, predicted = torch.max(outputs.data, dim=1)\n",
    "            total = labels.size(0)\n",
    "#             print('原来的值:{0}, 预测的值:{1}'.format(labels, predicted))\n",
    "            running_correct = (predicted == labels).sum()\n",
    "            running_acc += running_correct\n",
    "            loss = criterion(outputs, labels)\n",
    "            running_loss += loss.item()\n",
    "            loss.backward()\n",
    "            optimizer.step()\n",
    "\n",
    "            # 每loopNum个batch打印一次训练状态\n",
    "            loopNum = 10\n",
    "            if i % loopNum == loopNum - 1:\n",
    "                average_loss = running_loss / loopNum\n",
    "                logger.info('[{0}, {1}] loss: {2}'.format(epoch + 1, i + 1, average_loss))\n",
    "                running_acc = running_acc.float()\n",
    "                average_acc = running_acc / loopNum / total\n",
    "                \n",
    "                logger.info('[{0}, {1}] acc: {2}'.format(epoch + 1, i + 1, average_acc))\n",
    "                average_loss_series.append(average_loss)\n",
    "                running_loss = 0.0\n",
    "                running_acc = 0.0\n",
    "\n",
    "    x = range(0, len(average_loss_series))\n",
    "    plt.figure()\n",
    "    plt.plot(x, average_loss_series)\n",
    "    plt.show()\n",
    "    # %%\n",
    "    # 在测试集上测试\n",
    "    realLabel = []\n",
    "    predictedLabel = []\n",
    "\n",
    "\n",
    "    def correct_rate(net, testloader):\n",
    "        correct = 0.0\n",
    "        total = 0.0\n",
    "\n",
    "        for data in testloader:\n",
    "            images, labels = data\n",
    "            realLabel.append([int(label) for label in labels])\n",
    "            images = images.permute(0, 2, 1).float()\n",
    "#             print(\"--------!!---------\", images)\n",
    "#             print(images.shape)\n",
    "            outputs = net(images)\n",
    "\n",
    "            _, predicted = torch.max(outputs.data, dim=1)\n",
    "            predictedLabel.append([int(label) for label in predicted])\n",
    "            total += labels.size(0)\n",
    "            correct += (predicted == labels).sum()\n",
    "#             print(\"predicted的值为：\" , predicted)\n",
    "#             print(\"labels的值为：\" , labels)\n",
    "#             print(\"correct的值为:\", correct)\n",
    "            \n",
    "        logger.info(\"total的值为：\",total)\n",
    "#         return 100 * correct  # / total\n",
    "        return 100 * correct/ total \n",
    "\n",
    "\n",
    "    correct = correct_rate(net, test_loader)\n",
    "    logger.info(f'{len(test_loader) * 3}张测试集中准确率为： {correct}%')\n",
    "\n",
    "    # %%\n",
    "    import itertools\n",
    "    from sklearn.metrics import confusion_matrix\n",
    "\n",
    "    realLabel = list(itertools.chain.from_iterable(realLabel))\n",
    "    predictedLabel = list(itertools.chain.from_iterable(predictedLabel))\n",
    "\n",
    "    cm = confusion_matrix(realLabel, predictedLabel)\n",
    "    logger.info(cm)\n",
    "\n",
    "    logger.info('the running time is', time.time() - startTime)\n",
    "    torch.save(net, f'./models/model_{pixel}_{flag}.pkl')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "A5YnF55DLq90"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([400, 160])\n",
      "tensor([[[-0.0111,  0.0177, -0.0135,  ...,  0.4042,  0.5819,  0.7599],\n",
      "         [-0.0385,  0.0058, -0.0205,  ..., -0.9486, -0.8283, -0.7001],\n",
      "         [ 0.8840,  0.9641,  0.9323,  ...,  0.5702,  0.3411,  0.1730],\n",
      "         ...,\n",
      "         [ 0.9878,  0.9787,  0.7515,  ...,  0.2982, -0.0839, -0.2431],\n",
      "         [-0.8795, -0.6946, -0.3797,  ...,  0.2521,  0.5713,  0.7426],\n",
      "         [-0.3817, -0.7008, -0.9286,  ..., -0.9558, -0.8117, -0.7296]],\n",
      "\n",
      "        [[-0.0381, -0.0135, -0.0079,  ..., -0.9730, -0.8957, -0.7661],\n",
      "         [-0.0070, -0.0251, -0.0100,  ..., -0.1708, -0.5254, -0.7354],\n",
      "         [-0.5669, -0.2865,  0.1388,  ..., -0.9585, -0.9987, -0.9208],\n",
      "         ...,\n",
      "         [ 1.0066,  0.8822,  0.6259,  ...,  0.1878,  0.5222,  0.8314],\n",
      "         [ 0.4514,  0.2461, -0.1017,  ...,  0.8639,  1.0099,  1.0156],\n",
      "         [ 0.8978,  0.9889,  0.9681,  ..., -0.5224, -0.2377,  0.1140]]],\n",
      "       dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "aa = iter(train_loader)\n",
    "a, b = aa.next()\n",
    "print(a[0].shape)\n",
    "print(a)"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "name": "3_设计并训练神经网络.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
